// https://www.luogu.com.cn/problem/B3637

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int arr[5005];
int dp[5005]; // dp[i] 第 i 个数前面有多少个比它小的数目 + 1 （最长上升序列长度）

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    memset(dp, 0, sizeof(dp));

    dp[0] = 1;
    for (int i=1; i < n; i++) {
        dp[i] = 1;
        for (int j = 0; j < i; j++) {
            if (arr[j] < arr[i]) { // 严格递增
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
    }
    printf("%d\n", *max_element(dp, dp+n));

    return 0;
}